﻿// Inner Fire 游戏引擎库
// StandardObject - 标准游戏组件
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：应用层（4）
// 游戏中最基础的模型。没有任何特殊的能力。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-03-12

#pragma once

#include <game/object/game_object.h>
#include <game/resource/model.h>
#include <dx/mesh/render_item.h>

namespace ifire::game {
class StandardObject : public GameObject {
public:
  StandardObject(ikit::sstr name, Scene* scene, GameObject* parent = nullptr);
  StandardObject(const StandardObject& lhs) = delete;
  StandardObject& operator=(const StandardObject& lhs) = delete;
  ~StandardObject() override;

  // 更新Transform
  void UpdateTransform() override;
  // 直接设置最终的变换矩阵
  void SetRenderMatrix(FMat mat) override;
  // 给项目分配足够的位置（优化）
  void Reserve(size_t count);

  //
  // 属性访问
  //
  void AddRenderItem(dx::RenderItem* item);

protected:
  // 此项目对应的模型
  Model* model_;
  // 此项目对应的渲染对象
  eastl::vector<dx::RenderItem*> render_items_;
};

} // namespace ifire::game